package com.billdowney.util.return_type;

import java.util.ArrayList;
import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;

/**
 * @Description: 分页工具类
 * @author: 唐路钧
 * @date: 2019年1月8日 下午3:49:39
 */
public class PagingUtil {

	/**
	 * @Description: 传入相应参数计算出DataPagingFormat需要的值
	 * @param total    总数
	 * @param pageNum  当前页
	 * @param pageSize 每一页的大小
	 * @return
	 * @author: 唐路钧
	 * @date: 2019年1月8日 下午3:50:18
	 */
	public static DataPaging getDataPaging(Long total, int pageNum, int pageSize) {
		DataPaging dataPagingFormat = new DataPaging();
		// 设置总数
		dataPagingFormat.setTotal(total);
		// 设置当前页数
		dataPagingFormat.setPageNum(pageNum);
		// 设置每页条数
		dataPagingFormat.setPageSize(pageSize);
		// 设置总页数
		dataPagingFormat.setPageTotal((int) Math.ceil((double) dataPagingFormat.getTotal() / pageSize));
		// 设置第一页
		dataPagingFormat.setFirstPage(1);
		// 设置上一页页号
		dataPagingFormat.setPrePage(pageNum <= 1 ? 1 : pageNum - 1);
		// 设置下一页页号
		dataPagingFormat.setNextPage(
				pageNum >= dataPagingFormat.getPageTotal() ? dataPagingFormat.getPageTotal() : pageNum + 1);
		// 设置最后一页
		dataPagingFormat.setLastPage(dataPagingFormat.getPageTotal());
		// 设置是否是第一页
		dataPagingFormat.setISFirstPage(dataPagingFormat.getPageNum() == 1 && total != 0 ? true : false);
		// 设置是否是最后一页
		dataPagingFormat.setISLastPage(dataPagingFormat.getPageNum() == dataPagingFormat.getPageTotal() ? true : false);
		// 设置是否有上一页
		dataPagingFormat.setHasPreviousPage(dataPagingFormat.getPageNum() == 1 ? false : true);
		// 设置是否有下一页
		dataPagingFormat.setHasNextPage(
				dataPagingFormat.getPageNum() == dataPagingFormat.getPageTotal() || total == 0 ? false : true);
		// 设置导航页数
		// dataPagingFormat.setNavigatePages(navigatePages);
		// 计算并设置导航页列表
		int leftPage = dataPagingFormat.getPageNum() - dataPagingFormat.getNavigatePages() / 2;
		List<Integer> navigateNums = new ArrayList<>();
		for (int i = leftPage < 1 ? 1 : leftPage, j = 0; j < dataPagingFormat.getNavigatePages()
				&& i <= dataPagingFormat.getPageTotal(); i++, j++) {
			navigateNums.add(i);
		}
		dataPagingFormat.setNavigatepageNums(navigateNums);
		return dataPagingFormat;
	}

	/**
	 * @Description: 传入
	 * @param page
	 * @return
	 * @author: 唐路钧
	 * @date: 2019年1月8日 下午3:59:35
	 */
	public static DataPaging getDataPaging(Page<?> page) {
		DataPaging dataPaging = getDataPaging(page.getTotalElements(), page.getNumber() + 1, page.getSize());
		dataPaging.setList(page.getContent());
		return dataPaging;
	}

	/**
	 * @Description: 获取分页对象
	 * @param pageNum 需要查询的页数，非下标
	 * @param size    分页查询的数量
	 * @return
	 * @author: 唐路钧
	 * @date: 2019年1月8日 下午4:07:28
	 */
	public static Pageable getPageable(int pageNum, int size) {
		if(pageNum <= 1) {
			pageNum = 0;
		} else {
			pageNum--;
		}
		return PageRequest.of(pageNum, size);
	}

}
